package juc2.lock;

import java.util.concurrent.CountDownLatch;

/**
 * CountDownLatchDemo2：
 *多个子线程等待一个信号（主线程），然后一起执行。
 * 模拟主线程是裁判，子线程是运动员，裁判发令后，等待所有运动员准备就绪，然后一起起跑。
 */
public class CountDownLatchDemo2 {
    public static void main(String[] args) throws InterruptedException {
        // 计数器为1（等待1个信号：裁判发令）
        CountDownLatch startSignal = new CountDownLatch(1);
        int runnerCount = 3;

        for (int i = 0; i < runnerCount; i++) {
            int runnerId = i + 1;
            new Thread(() -> {
                try {
                    System.out.println("运动员" + runnerId + "：准备就绪，等待发令...");
                    // 等待信号（计数器变为0）
                    startSignal.await();
                    System.out.println("运动员" + runnerId + "：开始起跑！");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }).start();
        }

        // 模拟裁判准备时间
        Thread.sleep(2000);
        System.out.println("裁判：发令！");
        // 计数器减1（变为0），唤醒所有等待的运动员线程
        startSignal.countDown();
    }
}

